package qqclient.service;

import qqcommon.Message;
import qqcommon.MessageType;

import java.io.*;
import java.net.Socket;

public class ClientConnectServerThread extends Thread {
    //该线程需要持有Socket
    private Socket socket;

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        //因为Thread需要在后台和服务器通信，使用一个while循环
        while (true) {
            try {
//                System.out.println("客户端线程，等待读取从服务器端发送的信息。。");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                //如果服务器没有发送Message对象，线程会阻塞在这里
                Message message = (Message) ois.readObject();
                //判断当前这个message类型，然后做出相应的业务处理
                //如果读取到的是 服务端返回的在线用户列表
                if (message.getMesType().equals(MessageType.MESSAGE_RETURN_ONLINE_FRIEND)) {
                    //获取在线用户
                    //取出在线用户列表并显示
                    String[] onlineUsers = message.getContent().split(" ");//规定显示方式
                    System.out.println("============当前在线用户列表============");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户: " + onlineUsers[i]);
                    }
                } else if (message.getMesType().equals(MessageType.MESSAGE_COMM_MES)) {
                    //普通聊天
                    //把服务器转发的普通聊天消息，显示到客户端
                    System.out.println(message.getSendTime() + "\n" +
                            message.getSender() + " 对你说: " + message.getContent());

                } else if (message.getMesType().equals(MessageType.MESSAGE_TO_ALL_MES)) {
                    //群发消息和服务器推送消息
                    System.out.println(message.getSendTime() + "\n" +
                            message.getSender() + " 对大家说: " + message.getContent());
                } else if (message.getMesType().equals(MessageType.MESSAGE_FILE_MES)) {
                    //文件消息
                    System.out.println(message.getSendTime() + "\n" + message.getSender() +
                            " 给你发送文件 " + message.getSrc() + " 到 " + message.getDest());
                    //取出message的文件字节数组，通过文件输出流写入到磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getDest());
                    fileOutputStream.write(message.getFileBytes());
                    fileOutputStream.close();
                    System.out.println("文件保存成功~");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }
}
